package com.java.base.exercise.guava;


import com.alibaba.fastjson.JSON;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import org.junit.Test;

import java.util.List;
import java.util.Set;

/**
 * @Author RenPu
 * @Date 2021/7/3 11:35
 * @Version 1.0
 * @Description: guava中--Lists,Sets使用
 **/
public class SetsTest {

    /**
     * Sets类中常用的方法
     * 并集，交集，差集，分解集合中的子集，求俩个集合中的笛卡尔积
     * <p>
     * Lists类常用的方法
     * 反转，拆分
     */


    private static final Set set = Sets.newHashSet(1, 2, 4, 5);

    private static final Set set1 = Sets.newHashSet(11, 6, 9, 1);


    //并集
    @Test
    public void test1() {

        Set<Integer> union = Sets.union(set, set1);

        System.out.println("并集为 ：" + union);
    }

    //交集
    @Test
    public void test2() {
        Set<Integer> set2 = Sets.intersection(set, set1);
        System.out.println("交集为 ：" + set2);
    }


    //差集
    @Test
    public void test3() {

        //set包含的元素，set1不包含的元素的集合
        Set<Integer> set2 = Sets.difference(set, set1);
        System.out.println("差集为 ：" + set2);

        //set不包含的元素和set1不包含的元素的集合
        Set<Integer> set3 = Sets.symmetricDifference(set, set1);
        System.out.println("标准差集:" + set3);
    }


    //集合拆分为子集
    @Test
    public void test4() {
        Set<Set<Integer>> set6 = Sets.powerSet(set);
        System.out.println("将集合拆分为子集合为 ：" + JSON.toJSONString(set6));
    }


    //集合拆分为子集,计算俩个集合的笛卡尔积
    @Test
    public void test5() {
        Set<List<Integer>> set7 = Sets.cartesianProduct(set, set1);
        System.out.println("将集合拆分为子集合为 ：" + JSON.toJSONString(set7));
    }


    //Lists按照指定的长度进行分组

    /**
     * 使用场景，rpc调用最多支持三组数据进行同时访问调用，此时可以利用Lists的分组，就行分组查询然后进行数据组装
     */
    @Test
    public void test6() {
        List<Integer> integers = Lists.newArrayList(1, 2, 3, 8, 9, 4, 10, 101);
        List<List<Integer>> partition = Lists.partition(integers, 3);

        System.out.println(partition);


    }


    //Lists的反转功能
    @Test
    public void test7() {
        List<Integer> integers = Lists.newArrayList(1, 2, 3, 8, 9, 4, 10, 101);
        List<Integer> list = Lists.reverse(integers);

        System.out.println(list);


    }


}
